/**
 * 基础API地址
 * @constant {string}
 */
const BASE_URL = "http://localhost:8080/users";

/**
 * 获取所有用户数据
 * @returns {Promise} 返回包含用户数据的Promise对象
 * @example
 * GetUsers().then(users => console.log(users));
 */
export const GetUsers = () => {
    return fetch(BASE_URL)
        .then(res => res.json());  // 将响应转换为JSON格式
};

/**
 * 将对象转换为URL查询字符串
 * @param {Object} data - 需要转换的参数对象 
 * @returns {string} 返回格式为key1=value1&key2=value2的字符串
 * @example
 * GetParam({name: "John", age: 30}) // 返回 "name=John&age=30"
 */
const GetParam = (data) => {
    return Object.keys(data)
        .map(key => {
            // 对键和值进行编码，防止特殊字符破坏URL
            return `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`;
        })
        .join("&");  // 用&符号连接所有键值对
};

/**
 * 编辑用户信息
 * @param {string|number} id - 要编辑的用户ID
 * @param {Object} data - 要更新的用户数据
 * @returns {Promise} 返回包含更新结果的Promise对象
 */
export const EdiUser = (id, data) => {
    return fetch(`${BASE_URL}/${id}`, {
        method: "PATCH",  // 使用PATCH方法进行部分更新
        headers: {
            "Content-Type": "application/json"  // 告诉服务器发送的是JSON数据
        },
        body: JSON.stringify(data)  // 将数据对象转换为JSON字符串
    }).then(res => res.json());  // 解析响应数据
};

/**
 * 添加新用户
 * @param {Object} data - 新用户数据
 * @returns {Promise} 返回包含新增用户的Promise对象
 */
export const AddUser = (data) => {
    return fetch(BASE_URL, {
        method: "POST",  // 使用POST方法创建新资源
        headers: {
            "Content-Type": "application/json"
        },
        body: JSON.stringify(data)  // 发送JSON格式的用户数据
    }).then(res => res.json());
};

/**
 * 删除用户
 * @param {string|number} id - 要删除的用户ID 
 * @returns {Promise} 返回包含删除结果的Promise对象
 */
export const DeleteUser = (id) => {
    return fetch(`${BASE_URL}/${id}`, {
        method: "DELETE"  // 使用DELETE方法删除资源
    }).then(res => res.json());
};